package k2_oop.p1_classAndObject.demo16;


/**
 * 在程序中，经常要对时间进行操作，但是并没有时间类型的数据。那么，我们可以自己实现一个时间类，来满足程序中的需要
 *  定义名为 MyTime 的类，其中应有三个整型成员：时（hour），分（minute），秒（second）
 *  为 MyTime 类定义构造方法，以方便创建对象时初始化成员变量
 *  再定义diaplay方法，用于将时间信息打印出来。
 *  为MyTime类添加以下方法：
 *  addSecond(int sec)
 *  addMinute(int min)
 *  addHour(int hou)
 *  subSecond(int sec)
 *  subMinute(int min)
 *  subHour(int hou)
 *  分别对时、分、秒进行加减运算
 */
public class MyTime {

    //属性值，分别为 时分秒
    private int hour;
    private int minute;
    private int second;

    /**
     * 构造方法，用于初始化属性
     * @param hour
     * @param minute
     * @param second
     */
    public MyTime(int hour, int minute, int second) {
        this.hour = hour;
        this.minute = minute;
        this.second = second;
    }

    /**
     * 用于信息的展示   格式为：10:10:10
     */
    public void display(){
        System.out.println(this.hour+":"+this.minute+":"+this.second);
    }

    /**
     * 用于把时间的秒数转成具体的时分秒
     * @param second
     */
    public void calculateTime(int second){

        //用于计算的总描述，这里用 24*3600 对原总秒数相加为了避免时间出现负数情况
        int calculateSecond = 24*3600+this.hour*3600+this.minute*60+this.second+second;

        //用于计算新的时分秒，直接对属性赋值
        this.hour = calculateSecond/3600%24;
        this.minute = calculateSecond%3600/60;
        this.second = calculateSecond%3600%60;

        //最后做展示
        display();
    }

    /**
     * 添加秒
     * @param sec
     */
    public void addSecond(int sec){
        calculateTime(sec);
    }

    /**
     * 添加分钟
     * @param min
     */
    public void addMinute(int min){
        calculateTime(min*60);
    }

    /**
     * 添加小时
     */
    public void addHour(int hou){
        calculateTime(hou*3600);
    }

    /**
     * 减秒
     * @param sec
     */
    public void subSecond(int sec){
        calculateTime(-sec);
    }

    /**
     * 减分钟
     * @param min
     */
    public void subMinute(int min){
        calculateTime(-(min*60));
    }

    /**
     * 减小时
     * @param hou
     */
    public void subHour(int hou){
        calculateTime(-(hou*3600));
    }

    /**
     * 以下为三个属性的访问器
     * @return
     */
    public int getHour() {
        return hour;
    }

    public void setHour(int hour) {
        this.hour = hour;
    }

    public int getMinute() {
        return minute;
    }

    public void setMinute(int minute) {
        this.minute = minute;
    }

    public int getSecond() {
        return second;
    }

    public void setSecond(int second) {
        this.second = second;
    }
}
